零基础学爬虫(1)—请求与响应
阅读文本需要4分钟
最近有朋友在后台留言说想看一下零基础学爬虫方面的内容。虽然我个人的技术不是特别好,但是毕竟也还算是学过的,本着乐于分享的精神,在这里写一下教程,希望可以帮助那些需要的朋友,也欢迎大家指正我的错误哈O(∩_∩)O
爬虫基本流程
1. 发起请求
通过HTTP库向目标站点发起请求,也就是发送一个Request,请求可以包含额外的header等信息,等待服务器响应
2. 获取响应内容
如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能是HTML,Json字符串,二进制数据(图片或者视频)等类型
3. 解析内容
得到的内容可能是HTML,可以用正则表达式,页面解析库进行解析,可能是Json,可以直接转换为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理
4. 保存数据
保存形式多样,可以存为文本,也可以保存到数据库,或者保存特定格式的文件
总的来说就是上面的四个步骤,但是其中有一些细节的东西。并且需要有一些前端的基础知识储备。建议有空可以浏览一下W3School的教程
requests介绍
相信大家都是使用python3了吧,这里就使用py3为例子。
在爬虫中常用requests来请求,它能完全能满足各种http功能。并且常用的只有一个get方法,所以非常的易学。
requests安装
python是没有自带requests模块的,需要单独通过pip安装
pip install requests
发起请求
1import requests
2url ="http://www.baidu.com"
3response =requests.get(url)
4print(response.content.decode("utf-8"))
run后截图:
我们可以看出response使用起来确实非常方便,这里有个问题需要注意一下:
很多情况下的网站如果直接response.text
会出现乱码的问题,所以这个使用response.content
这样返回的数据格式其实是二进制格式,然后通过decode()
转换为utf-8
,这样就解决了通过response.text
直接返回显示乱码的问题。
添加请求头
了解了get方法之后是不是跃跃欲试,但是如果直接通过requests请求知乎网站的时候,默认是无法访问的,返回只是下面没有意义的内容
1<html>
2<head><title>400 Bad Request</title></head>
3<body bgcolor="white">
4<center><h1>400 Bad Request</h1></center>
5<hr><center>openresty</center>
6</body>
7</html>
因为访问知乎需要头部信息,这个时候我们在谷歌浏览器里输入 chrome://version ,就可以看到用户代理,将用户代理添加到头部信息,将爬虫伪装;其他浏览器可以通过开发者模式查看,参考图2
添加请求头是非常简单的,例如:
1import requests
2url ='https://www.zhihu.com'
3headers = {
4 "User-Agent":
5 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36"
6}
7response =requests.get(url,headers=headers)
8print(response.content.decode("utf-8"))
这样就可以请求到知乎了
使用代理
有时候同一个IP去爬取同一网站,可能会被网站的服务器屏蔽。为了防止这一情况的发生,我们可以使用代理IP,这样服务器端显示的就不是我们的真实IP地址了。
在requests中使用代理的方法也很简单,只需要传入 proxies
参数即可。
1import requests
2url ='https://www.zhihu.com'
3headers = {
4 "User-Agent":
5 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36"
6}
7http = 'http://112.95.207.165:9999'
8https = 'https://27.46.49.187:9797'
9proxies = {
10 'http': http,
11 'https': https,
12}
13try:
14 response = requests.get('http://httpbin.org/get', headers=headers,proxies=proxies)
15 print(response.text)
16except requests.exceptions.ConnectionError as e:
17 print('Error', e.args)
这里访问的是 http://httpbin.org/get , 返回的是你访问的信息,例如下面这样子
1{"args":{},
2 "headers":{
3 "Accept":"*/*",
4 "Accept-Encoding":"gzip, deflate",
5 "Connection":"close",
6 "Host":"httpbin.org",
7 "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36"
8 },
9 "origin":"112.95.207.165",
10 "url":"http://httpbin.org/get"
11 }
如果想试验一下的话,最好换一下上面的IP地址,可以去西刺代理中找一些可用的免费代理。
最后
ok,今天的分享包括了爬虫基本流程的前两个步骤,当然还有一些没有介绍,例如添加cookie等,后面还会继续分享。希望这篇干货对你们有帮助哈~~~
另外 第三步:解析内容 可以参考一下推荐阅读哈
推荐阅读: